package vista.paneles;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import java.awt.event.MouseListener;

import javax.swing.tree.DefaultMutableTreeNode;

import java.util.Iterator;
import java.util.List;

import logica.Identificador;

@SuppressWarnings("serial")
public class PanelIdentificadores extends JPanel {
	
	private TreeDeIdentificadores listIdentificadores;
	
	private JButton buttonNuevo;
	private JButton buttonEliminar;
	
	public PanelIdentificadores(String titulo) 
	{
		super();
		
		this.setBorder(BorderFactory.createTitledBorder(titulo));
		
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[]{160, 110};
		gridBagLayout.rowHeights = new int[]{0, 0, 0};
		gridBagLayout.columnWeights = new double[]{1.0, 1.0};
		gridBagLayout.rowWeights = new double[]{1.0, 1.0, 1.0};
		this.setLayout(gridBagLayout);
		
		agregarLista();
		agregarBotonNuevo();
		agregarBotonEliminar();
		
		setVisibilidad();
	}
	
	/*para datos*/
	
	public List<Identificador> getIdentificadores()
	{
		return this.listIdentificadores.getIdentificadores();
	}
	
	/*para eventos*/
	
	public void escucharEventosBotonNuevo(MouseListener controlador)
	{
		this.buttonNuevo.addMouseListener(controlador);
	}
		
	public void escucharEventosBotonEliminar(MouseListener controlador)
	{
		this.buttonEliminar.addMouseListener(controlador);
	}
	
	public void agregarIdentificador(Identificador identificador)
	{		
		Integer cant = new Integer(this.listIdentificadores.getCantidadDeIdentificador()+1);
		String nombre = "clave" + cant.toString();
		identificador.setToString(nombre);
		this.listIdentificadores.agregarIdentificador(identificador);
	}
	
	public void agregarIdentificadores(List<Identificador> identificadores)
	{		
		Iterator<Identificador> identificador = identificadores.iterator();
		
		while(identificador.hasNext())
			this.agregarIdentificador(identificador.next());
	}

	public void quitarIdentificador() throws NoEsNodoPadre
	{
		this.listIdentificadores.quitarIdentificador();
	}
	
	public void setEnabled(boolean enabled)
	{
		super.setEnabled(enabled);
		listIdentificadores.setEnabled(enabled);
		buttonNuevo.setEnabled(enabled);
		buttonEliminar.setEnabled(enabled);
		
		this.setVisibilidad();
	}
	
	private void setVisibilidad()
	{
		DefaultMutableTreeNode node = (DefaultMutableTreeNode) listIdentificadores.getLastSelectedPathComponent();

		if (node == null) return;
		{
			this.buttonEliminar.setEnabled(false);	
		}
	}
	
	/*para dibujar*/
	
	private void agregarBotonEliminar() 
	{
		buttonEliminar = new JButton("Eliminar");
		
		GridBagConstraints gbc_btnEliminar = new GridBagConstraints();
		gbc_btnEliminar.anchor = GridBagConstraints.BELOW_BASELINE;
		gbc_btnEliminar.insets = new Insets(1, 2, 0, 2);
		gbc_btnEliminar.fill = GridBagConstraints.HORIZONTAL;
		gbc_btnEliminar.gridx = 1;
		gbc_btnEliminar.gridy = 1;
		
		add(buttonEliminar, gbc_btnEliminar);
	}

	private void agregarBotonNuevo() 
	{
		buttonNuevo = new JButton("Nuevo");
		
		GridBagConstraints gbc_btnNuevo = new GridBagConstraints();
		gbc_btnNuevo.anchor = GridBagConstraints.BELOW_BASELINE;
		gbc_btnNuevo.fill = GridBagConstraints.HORIZONTAL;
		gbc_btnNuevo.insets = new Insets(1, 2, 5, 2);
		gbc_btnNuevo.gridx = 1;
		gbc_btnNuevo.gridy = 0;
		
		add(buttonNuevo, gbc_btnNuevo);
	}

	private void agregarLista()
	{
		listIdentificadores = new TreeDeIdentificadores(new DefaultMutableTreeNode("identificadores"));
		
		GridBagConstraints gbc_list = new GridBagConstraints();
		gbc_list.gridheight = 3;
		gbc_list.insets = new Insets(5, 10, 5, 10);
		gbc_list.fill = GridBagConstraints.BOTH;
		gbc_list.gridx = 0;
		gbc_list.gridy = 0;
		
		this.add(new JScrollPane(listIdentificadores), gbc_list);
	}
}
